#include <iostream>

using std::cout;
using std::endl;
#if 0
int add(int x, int y)
{
    return x + y;
}
#endif

//int add(){ return 10; }
//int add(int x){ return 10 + x; }
//int add(int x, int y){ return y + x; }
//int add(int x, int y, int z){ return y + x + z; }
//1、对于一个函数而言，可以将所有的参数都设置默认值
//2、对于函数设置默认参数而言，一定要从右向左连续赋值,中间不要
//空出来(C/C++而言，函数参数入栈的顺序是从右向左)
//3、如果函数设置了默认参数，注意重载的时候可能发生冲突
//因为设置默认参数等价于该函数有好几种可能性
//4、给函数设计默认参数的目的：减少代码的书写
//5、如果想给函数设置默认初值的时候，并且又分成了声明与实现，那么
//需要在声明的时候设置默认初值，在实现的时无需在加默认初值
//否则会报错
int add(int x = 0 , int y = 10, int z = 0);
/* { */
/*     return x + y + z; */
/* } */

void test()
{
    int a = 3;
    int b = 4;
    int c = 5;

    cout << "add(a, b, c) = " << add(a, b, c) << endl;
    cout << "add(a, b) = " << add(a, b) << endl;
    cout << "add(a) = " << add(a) << endl;
    cout << "add() = " << add() << endl;
    cout << "add() = " << add() << endl;
}

int main(int argc, char *argv[])
{
    test();
    return 0;
}

int add(int x, int y , int z)
{
    return x + y + z;
}




